package it.polimi.traveldream;

import java.util.ArrayList;
import java.util.List;

import it.polimi.traveldream.entities.Custompackage;
import it.polimi.traveldream.entities.Excursion;
import it.polimi.traveldream.entities.Hotel;
import it.polimi.traveldream.entities.PackageBase;
import it.polimi.traveldream.entities.Transport;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.eclipse.persistence.internal.jpa.parsing.EscapeNode;

/**
 * Session Bean implementation class CreazionePacchetto
 */
@Stateless
public class CreazionePacchetto implements CreazionePacchettoLocal {

    /**
     * Default constructor. 
     */
    public CreazionePacchetto() {
        // TODO Auto-generated constructor stub
    }
    
    @PersistenceContext
    private EntityManager em;
	
    @Override
	public void add(CreatedPackageDTO createdPackageDTO){
		
		PackageBase tmp=new PackageBase(createdPackageDTO);
		double minhotel=0;
		double minandata=0;
		double minritorno=0;
		double minescursione=0;
		
		List<Hotel>h=new ArrayList<Hotel>();
		List<Transport>t1=new ArrayList<Transport>();
		List<Transport>t2=new ArrayList<Transport>();
		List<Excursion>e=new ArrayList<Excursion>();
		
		//inizializzo il minhotel con il prezzo del primo hotel disponibile
		minhotel=em.find(Hotel.class, Integer.parseInt(createdPackageDTO.getSelectedHotels().get(0))).getPrice();
		
		for(String s:createdPackageDTO.getSelectedHotels()){
			int j= Integer.parseInt(s);
			h.add(em.find(Hotel.class, j));
			if(em.find(Hotel.class, j).getPrice()<minhotel)
				minhotel=em.find(Hotel.class,j).getPrice();
		}
		System.out.println("Lista Hotel creata");
		
		
		
		//inizializzo il minandata con il prezzo del primo volo di andata disponibile
		minandata=em.find(Transport.class, Integer.parseInt(createdPackageDTO.getSelectedAndata().get(0))).getPrezzo();
		
		for(String s:createdPackageDTO.getSelectedAndata()){
			int j= Integer.parseInt(s);
			t1.add(em.find(Transport.class, j));
			if(em.find(Transport.class, j).getPrezzo()<minandata)
				minandata=em.find(Transport.class, j).getPrezzo();
		}
		System.out.println("Lista andata creata");
		
		
		//inizializzo il minritorno con il prezzo del primo volo di ritorno disponibile
		minritorno=em.find(Transport.class, Integer.parseInt(createdPackageDTO.getSelectedRitorno().get(0))).getPrezzo();
		
		for(String s:createdPackageDTO.getSelectedRitorno()){
			int j= Integer.parseInt(s);
			t2.add(em.find(Transport.class, j));
			if(em.find(Transport.class, j).getPrezzo()<minritorno)
				minritorno=em.find(Transport.class, j).getPrezzo();
		}
		System.out.println("Lista ritorno creata");
		
		
		//inizializzo il minescursione con il prezzo della prima escursione disponibile
		minescursione=em.find(Excursion.class, Integer.parseInt(createdPackageDTO.getSelectedExcursions().get(0))).getPrice();
		
		for(String s:createdPackageDTO.getSelectedExcursions()){
			int j= Integer.parseInt(s);
			e.add(em.find(Excursion.class, j));
			if(em.find(Excursion.class, j).getPrice()<minescursione)
				minescursione=em.find(Excursion.class, j).getPrice();		
		}
		System.out.println("Lista escursioni creata");
		
		for(Transport t:t2){
			System.out.print("ciao"+t.getId());			
		}
		
		tmp.setPrezzo(minandata+minritorno+minescursione+minhotel);
		tmp.setHotels(h);
		tmp.setTransports(t1);
		tmp.setTransportsritorno(t2);
		tmp.setExcursions(e);
		
		System.out.print("prima del persist");
		
		for(Transport t:tmp.getTransports()){
			System.out.print("ciao"+t.getId());			
		}
		
		for(Transport t:tmp.getTransportsritorno()){
			System.out.print("ciao1"+t.getId());			
		}
       		
       		
		em.persist(tmp);
    }
}
